package io.github.talelin.latticy.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import io.github.talelin.latticy.dto.warehouse.UpdateWareDTO;
import io.github.talelin.latticy.dto.warehouse.WarehouseDTO;
import io.github.talelin.latticy.model.WarehouseDO;
import com.baomidou.mybatisplus.extension.service.IService;
import io.github.talelin.latticy.vo.WarehouseVO;

import java.util.List;

/**
 * <p>
 * 仓库 服务类
 * </p>
 *
 * @author generator@wulongbo
 * @since 2022-05-10
 */
public interface WarehouseService extends IService<WarehouseDO> {
    /**
     * 新建仓库
     *
     * @param validator 新建仓库校验器
     * @return 被创建的仓库
     */
    WarehouseDO createWarehouse(WarehouseDTO validator);

    /**
     * 更新仓库
     *
     * @param code  仓库编码
     * @param dto 仓库信息
     * @return 是否成功
     */
    boolean updateWarehouse(String code,UpdateWareDTO dto);

    /**
     * 查询仓库
     *
     * @param code  仓库编码
     * @return 查询的仓库
     */
    WarehouseDO getWarehouseByCode(String code);

    /**
     * 查询所有仓库
     * @param count
     * @param page
     * @return
     */
    IPage<WarehouseDO> getWarePage(Integer page,Integer count);

    /**
     * 查询所有仓库
     * @return
     */
    List<WarehouseDO> getWareList();

    /**
     * 根据仓库id检查仓库是否存在
     *
     * @param code 仓库id
     * @return true代表存在
     */
    boolean checkWarehouseExistByCode(String code);

    /**
     * 根据仓库名检查仓库是否存在
     *
     * @param name 仓库名
     * @return true代表存在
     */
    boolean checkWarehouseExistByName(String name);

    /**
     * 根据邮箱检查是否存在
     *
     * @param email 邮箱
     * @return true代表存在
     */
    boolean checkWarehouseExistByEmail(String email);

    /**
     * 根据仓库代码列表查询存在的个数
     *
     * @param wareCodes 仓库代码列表
     * @return 个数
     */
    int getWarehouseCountByWareCodes(List<String> wareCodes);

    /**
     * OMS ROOT账号 查询所有用户关联的仓库别表
     * @return 仓库列表
     */
    List<WarehouseVO> getAllWarehouseByOmsRoot();
}
